package view_server

import (
	"bigdevops/src/common"
	"bigdevops/src/config"
	"bigdevops/src/models"
	"fmt"
	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
	"strconv"
	"strings"
)

func getJobExecResultByJobId(c *gin.Context) {

	sc := c.MustGet(common.GIN_CTX_CONFIG_CONFIG).(*config.ServerConfig)

	// 分页
	currentPage, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
	pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "100"))

	offset := 0
	limit := 0
	limit = pageSize
	if currentPage > 1 {
		offset = (currentPage - 1) * limit
	}

	// 	数据库中拿到所有的menu列表
	jobIds := c.DefaultQuery("jobId", "")
	jobId, _ := strconv.Atoi(jobIds)

	objs, err := models.GetJobExecResultByJobId(jobId)
	if err != nil {
		sc.Logger.Error("去数据库中拿这个jobId所有的结果错误",
			zap.Error(err),
		)
		common.ReqBadFailWithMessage(fmt.Sprintf("去数据库中拿这个jobId所有的结果错误:%v", err.Error()), c)
		return
	}

	searchStatus := c.DefaultQuery("status", "")
	searchIp := c.DefaultQuery("ip", "")
	//searchName := c.DefaultQuery("name", "")

	// 	数据库中拿到所有的menu列表

	allIds := []int{}
	//// 遍历 role 准备menuIds 列表
	for _, obj := range objs {
		obj := obj

		// 在这里处理查询
		if searchStatus != "" && obj.Status != searchStatus {
			continue
		}
		if searchIp != "" && !strings.Contains(obj.HostIp, searchIp) {
			continue
		}
		allIds = append(allIds, int(obj.ID))

		//role.MenuIds = menuIds
	}

	if len(allIds) == 0 {
		common.OkWithDetailed(allIds, "ok", c)
		return
	}

	objs, err = models.GetJobResultByIdsWithLimitOffset(allIds, limit, offset)
	if err != nil {
		sc.Logger.Error("limit-offset去数据库中拿所有的任务结果错误",
			zap.Error(err),
		)
		common.ReqBadFailWithMessage(fmt.Sprintf("limit-offset去数据库中拿所有的脚本模板错误:%v", err.Error()), c)
		return
	}

	resp := &ResponseResourceCommon{
		//Total: models.GetJobTaskCount(), 因为是带了查询条件的 所以 count 不能是all 而是 过滤后的total
		Total: len(allIds),
		Items: objs,
	}

	common.OkWithDetailed(resp, "ok", c)
}

func getJobExecResultOne(c *gin.Context) {
	sc := c.MustGet(common.GIN_CTX_CONFIG_CONFIG).(*config.ServerConfig)
	// 校验一下 menu字段
	id := c.Param("id")

	// 先 去db中根据id找到这个user
	intVar, _ := strconv.Atoi(id)
	dbObj, err := models.GetJobResultById(intVar)
	if err != nil {
		sc.Logger.Error("根据id找脚本模板错误", zap.Any("脚本模板", id), zap.Error(err))
		common.FailWithMessage(err.Error(), c)
		return
	}
	common.OkWithDetailed(dbObj, "ok", c)

}

func getJobExecResultDetail(c *gin.Context) {

	sc := c.MustGet(common.GIN_CTX_CONFIG_CONFIG).(*config.ServerConfig)
	// 校验一下 menu字段
	id := c.Param("id")
	sc.Logger.Info("删除脚本模板", zap.Any("id", id))

	// 先 去db中根据id找到这个user
	intVar, _ := strconv.Atoi(id)
	dbObj, err := models.GetJobResultById(intVar)
	if err != nil {
		sc.Logger.Error("根据id找脚本模板错误", zap.Any("脚本模板", id), zap.Error(err))
		common.FailWithMessage(err.Error(), c)
		return
	}

	//dbObj.FillFrontAllData()

	common.OkWithDetailed(dbObj, "ok", c)
}
